import numpy as np

from core.layer import Layer
from implement.variables.parameter import Parameter


# 嵌入层
'''
这个类是一个嵌入层，用于将输入的离散索引转换为密集的向量表示。
在初始化时，需要提供
输入词汇的大小 in_size 和
输出向量的大小 out_size。
在前向传播中，输入是索引数组 x，输出是对应于输入索引的稠密向量。
'''

class EmbedID(Layer):
    def __init__(self, in_size, out_size):
        """嵌入层，用于将输入的索引转换为稠密向量。

        Args:
            in_size (int): 输入词汇的大小。
            out_size (int): 输出稠密向量的大小。
        """
        super().__init__()
        self.W = Parameter(np.random.randn(in_size, out_size), name='W')

    def __call__(self, x):
        """嵌入层的前向传播。

        Args:
            x (ndarray): 输入的索引数组。

        Returns:
            y (ndarray): 对应于输入索引的稠密向量。
        """
        y = self.W[x]
        return y
